import axios from 'axios'
import {ElLoading, ElMessage, ElMessageBox} from 'element-plus'
/* import type {Action} from 'element-plus' */

//实例化网络请求对象
const httpTool = axios.create({
    baseURL:'',
    timeout: 60000,
});

let pendingCount = 0;
let loadingInstance = '';
//请求拦截器
httpTool.interceptors.request.use((config)=>{
    config.data.token = window.sessionStorage.getItem('token');
    //发送请求之前执行
    if(!config.data.noLoading){
        pendingCount++;
    }
    if(pendingCount){
        loadingInstance = ElLoading.service({
            text: '数据处理中',
            background: 'rgba(0, 0, 0, 0.4)',
        });
    }
    return config;
},(error)=>{
    //发生错误的时候执行

})

//响应拦截器
httpTool.interceptors.response.use((response)=>{
    //响应成功以后的，执行then之前的代码写这里拉
    if(pendingCount){
        pendingCount--;
    }
    if(!pendingCount && typeof(loadingInstance) == 'object'){
        loadingInstance.close();
    }
    if(response.data.is_success == 'F'){
        ElMessageBox.confirm(response.data.msg,'警告',{
            confirmButtonText:'好的',
            cancelButtonText:'取消',
            type: 'error',
            draggable: true,
        }).then(()=>{
            if(response.data.data.relogin == 1){
                window.sessionStorage.removeItem('token');
                window.location.href = '/';
            }
        }).catch(()=>{
            
        })
        if(JSON.stringify(response.data) == '{}'){
            return Promise.reject(response.data.msg);
        }
    }
    return response.data;
},(error)=>{
    //服务端相应错误内容
    if(typeof(loadingInstance) == 'object'){
        loadingInstance.close();
    }
    ElMessageBox.alert('服务器未响应','警告',{
        confirmButtonText:'好的',
        type: 'error',
        draggable: true,
    })
    return Promise.reject(error.response.data.message);
})


export default httpTool


/* httpTool.post('api/Login/checkLogin',{
    params:{
        userData:loginForm
    },
    headers:{'companey':'max'} //自定义请求头
}).then(response=>{
    console.log(response);     //http相应头
    console.log(response.data); //http相应数据
}).catch(error=>{
    console.log(error);         //error可以是本地的错误信息，也可以是服务器的错误信息
    console.log(error.response);         //接受来自服务端的相应错误，如果服务器没有错误，则没有response属性
}); */